// 给定一个字符串S，通过将字符串S中的每个字母转变大小写，我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

// 示例:
// 输入: S = "a1b2"
// 输出: ["a1b2", "a1B2", "A1b2", "A1B2"]

// 输入: S = "3z4"
// 输出: ["3z4", "3Z4"]

// 输入: S = "12345"
// 输出: ["12345"]

// 注意：
//     S 的长度不超过12。
//     S 仅由数字和字母组成。

/**
 * @param {string} S
 * @return {string[]}
 */
var letterCasePermutation = function(S) {
	const reg= /^[A-Za-z]+$/;
	let res = [];
	res.push(S);
    for(let i = 0; i < S.length; i++) {
    	if (reg.test(S[i])) {
    		for(let j = res.length; j > 0; j--) {
    			let d = res.shift();
    			let left = d.substring(0, i);
    			let right = d.substring(i + 1);
    			res.push(left + S[i].toLowerCase() + right);
    			res.push(left + S[i].toUpperCase() + right);
    		}
    	}
    }
    
    return res;
};

console.log(letterCasePermutation("a1b2"));

